# =====================================
# MySQL / 数据库参数文件
# =====================================

# ===================================== 客户端
[client]
# 端口
port                                = {{ mysql_param_port }}
# 套接字文件
#socket                             = {{ directory_mysql_socket }}/mysql{{ mysql_param_port }}.sock
socket                              = /var/lib/mysql/mysql.sock

# ===================================== 导出
[mysqldump]
quick
max_allowed_packet                  = 16M

# ===================================== MySQL
[mysql]
default_character_set               = utf8mb4

# ===================================== MySQL 服务端
[mysqld]

# 端口
port                                = {{ mysql_param_port }}

# 目录
# -- 安装目录
# |- 用YUM安装的，会被直接安装到：/usr/bin/mysql*
#basedir                            = /usr/local/mysql

# -- 数据目录
datadir                             = {{ directory_mysql_data }}

# -- 临时目录
tmpdir                              = {{ directory_mysql_temp }}

# 文件
# -- MySQL进程文件
pid-file                            = {{ directory_mysql_pid }}/mysql{{ mysql_param_port }}.pid

# -- 套接字文件
#socket                             = {{ directory_mysql_socket }}/mysql{{ mysql_param_port }}.sock
socket                              = /var/lib/mysql/mysql.sock

# MySQL启动用户
user                                = mysql

# 软链接
symbolic-links                      = 0

# 字符集
character_set_server                = utf8mb4
collation_server                    = utf8mb4_unicode_ci

# 默认库名表名保存为小写
# 不区分大小写
lower_case_table_names              = 1

# 事务隔离级别
transaction_isolation               = READ-COMMITTED

# MySQL支持的SQL语法
sql_mode                            = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# -- 是否允许客户端执行：load data local infile
local_infile                        = 0

# 过小可能会导致写入(导入)数据失败
max_allowed_packet                  = 200M

# 数据库连接与错误
# -- 连接时的最大错误数
max_connect_errors                  = 100000
# -- 最大连接数
max_connections                     = 16000

# 错误日志文件
log-error                           = {{ path_mysql_error_log }}
log_timestamps                      = system

# 慢日志
# -- 是否启用
slow_query_log                      = 1

# -- 慢日志文件的位置
slow_query_log_file                 = {{ directory_mysql_log_slowlog }}/mysql-slow.log

# -- 执行时间超过多久的SQL被认为是慢SQL
long_query_time                     = 1

# Relay Log
# -- 【Relay Log】文件的位置
relay_log                           = {{ directory_mysql_log_relaylog }}/mysql-relay

# -- 记录 relay.info 到数据表中
relay_log_info_repository           = TABLE

# 二进制日志文件
log_bin                             = {{ directory_mysql_log_binlog }}/mysql-bin
max_binlog_size                     = {{ mysql_param_max_binlog_size }}
binlog_format                       = row
binlog_row_image                    = full
binlog_cache_size                   = 4m
max_binlog_cache_size               = 512m

# -- BINLOG 过期时间（单位：天）
expire_logs_days                    = {{ mysql_param_expire_logs_days }}

# 复制 / 主从
# -- MySQL 服务器ID
server_id                           = {{ mysql_server_id }}

# -- 记录 master.info 到数据表中
master_info_repository              = TABLE

# -- 启动MySQL服务的时候，不自动拉起slave进程
skip-slave-start

log-slave-updates
slave-net-timeout                   = 120

# 数据引擎：InnoDB
# -- 数据缓冲区
# |- 比OS系统的内存的一半，还要小一点
# |- 否则MySQL服务端实例容易发生：OOM
innodb_buffer_pool_size             = {{ mysql_param_innodb_buffer_pool_size }}

innodb_open_files                   = 1000
innodb_adaptive_hash_index          = ON
innodb_file_format                  = Barracuda
innodb_log_file_size                = 200m
innodb_flush_method                 = O_DIRECT
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup  = 1

# 这个参数不能设置为【0】，有可能有数据丢失风险
innodb_flush_log_at_trx_commit      = 1

innodb_file_per_table

delayed_queue_size                  = 1000
sort_buffer_size                    = 1M
join_buffer_size                    = 2M 
max_allowed_packet                  = 500M 
table_open_cache                    = 200
wait_timeout                        = 86400

# 查询缓存
query_cache_type                    = 1
query_cache_size                    = 10383360

# -- 在数据库发生异常的时候，强制数据库修复
# |- 平时用不到该参数
#innodb_force_recovery=6

# 密码验证
#plugin-load                         = validate_password.so
#validate-password                   = OFF
#old_passwords                       = 0

# 半同步
# -- 这里的参数应该由Ansible运行时的选项来确定是否开启，而不是现在就打开
# -- Ansible的lineinfile的替换应该是安全的单行替换

# -- 插件
#plugin_dir                           = {{ semisync_plugin_dir }}
#plugin_load                          = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

# loose_ / 表示没有该参数就忽略掉

# -- 主库
# v1
#rpl_semi_sync_master_enabled         = 1
#rpl_semi_sync_master_timeout         = {{ mysql_param_rpl_semi_sync_master_timeout }}

# v2
#loose_rpl_semi_sync_master_enabled   = 1
#loose_rpl_semi_sync_master_timeout   = {{ mysql_param_rpl_semi_sync_master_timeout }}

# -- 从库
# v1
#rpl_semi_sync_slave_enabled          = 1

# v2
#loose_rpl_semi_sync_slave_enabled    = 1

# MySQL数据库：只读
# -- 主库注释该配置
# -- 从库打开该配置
#read_only                            = 1

# ===================================== Finished.
